When a software application is compiled, the various libraries relied upon by the software application can be statically or dynamically linked to the resulting (i.e., executable) software program. In particular, static linking involves incorporating, into the executable software application, the portions of the libraries relied upon by the software application. Notably, while static linking can improve launch time latencies (relative to dynamic linking, described below), this comes at the cost of decreased flexibility. For example, when the libraries relied upon by the software application are updated (e.g., bug fixes), the software application typically needs to be re-complied with the updated libraries to access the benefits of the updated libraries. To address this issue, dynamic linking involves, at compile time, including references to the portions of the libraries relied upon by the software application. In turn, when the software application is executed on a target computing device, the references can be updated to specifically target the portions of the libraries that are stored on the target computing device. In this manner, dynamic linking can provide enhanced flexibility relative to static linking, as the updated libraries can simply be distributed to software applications installed on target machines in lieu of intensive recompiling.
Unfortunately, despite the foregoing benefits of dynamic linking, several disadvantages with this approach continue to persist that have yet to be addressed. For example, with existing dynamic linking approaches, the increased flexibility comes at the cost of increased latency at runtime while dynamic linking takes place for a given software application. Moreover, existing dynamic linking approaches are susceptible to malicious users who can thwart in-place security protocols and trick software applications into executing in unauthorized modes. For example, libraries relied upon by a given software application can be swapped with malicious libraries that can compromise the overall security of the computing device on which the software application executes. As a result, the overall user experience is deteriorated by the reliable launch-time delays and potential security issues.